home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
gfx
/
edit
/
Pgx_CEL_src.lha
/
pgx_cel_src
/
cel_gio.e
next >
Wrap
Text File
|
1999-01-09
|
3KB
|
139 lines
/*
** CEL.gio - load and save Cherry KiSS CELs (truecolor + alpha) using Photogenics
**
** Written by Michal Durys - misha@femina.com.pl
*/
OPT PREPROCESS
LIBRARY 'CEL.gio',1,0,'Loads CEL files used in kisekae sets' IS
gioInfo,
gioExamine(A0),
gioRead(A0),
gioWrite(A0),
gioSavePrefs(A0),
gioCleanUp(A0),
gioAbout(A0),
gioStartup,
gioShutDown,
gioLoadPrefs(A0)
MODULE 'dos/dos'
MODULE 'tools/magicbits'
MODULE '*pgs','*gio'
MODULE '*kiss_files'
PROC gioInfo() IS GIOF_LOADER24 OR GIOF_SAVER24 OR GIOF_LOADFILE OR GIOF_SAVEFILE
PROC gioCleanUp(g:PTR TO giodata) IS EMPTY
PROC gioSavePrefs(g:PTR TO giodata) IS EMPTY
PROC gioLoadPrefs(g:PTR TO giodata) IS EMPTY
PROC gioStartup() IS EMPTY
PROC gioShutDown() IS EMPTY
PROC gioAbout(g:PTR TO giodata) IS EMPTY
PROC main() IS EMPTY
PROC gioExamine(g:PTR TO giodata)
DEF h:PTR TO kiss_celfileheader
pgsbase:=g.pgsbase
dosbase:=g.dosbase
g.flags:=gioInfo()
h:=g.data
IF (h.id=KISS_ID) AND (h.mark=FILEMARK_CHERRYCEL)
g.width:=pcword(h.width)
g.height:=pcword(h.height)
g.depth:=24
g.error:=LOAD_OK
ELSE
g.error:=LOAD_WRONGTYPE
ENDIF
ENDPROC g.error
PROC gioRead(g:PTR TO giodata)
DEF x,y,p:PTR TO CHAR,celbuf:PTR TO CHAR,bufpos:PTR TO LONG
-> extract pgs library base
pgsbase:=g.pgsbase
-> shoould I Seek() file?
Seek(g.filehandle,SIZEOF kiss_celfileheader,OFFSET_BEGINNING)
celbuf:=FastNew(g.width*g.height*4)
Read(g.filehandle,celbuf,g.width*g.height*4)
bufpos:=celbuf
SetProgress('Loading CEL image...',0)
FOR y:=0 TO g.height-1
IF y AND $F = 0
IF SetProgress(0,y*100/g.height)<>1
g.error:=LOAD_ABORTED
RETURN g.error
ENDIF
ENDIF
p:=GetLine(g,y)
FOR x:=0 TO g.width-1
^p:=^bufpos -> strange, but it works ;)
p:=p+3
bufpos:=bufpos+4
ENDFOR
ReleaseLine(g,y)
ENDFOR
-> dispose allocated buffer
IF celbuf THEN FastDispose(celbuf,g.width*g.height*4)
g.error:=NIL
ENDPROC g.error
PROC gioWrite(g:PTR TO giodata)
DEF h:PTR TO kiss_celfileheader
DEF x,y,p:PTR TO CHAR
DEF linebuf:PTR TO LONG
-> extract pgs library base
pgsbase:=g.pgsbase
dosbase:=g.dosbase
-> we can save only 24 bit data
IF g.depth<>24
g.error:=LOAD_WRONGTYPE
RETURN g.error
ENDIF
-> fill header info
h:=FastNew(SIZEOF kiss_celfileheader)
h.id:=KISS_ID
h.mark:=FILEMARK_CHERRYCEL
h.width:=pcword(g.width)
h.height:=pcword(g.height)
h.xoffset:=0
h.yoffset:=0
h.bitsperpixel:=32
-> write header to file
Write(g.filehandle,h,SIZEOF kiss_celfileheader)
FastDispose(h,SIZEOF kiss_celfileheader)
-> allocate memory for line buffer
linebuf:=FastNew(g.width*4)
-> save image
SetProgress('Saving CEL image...',0)
FOR y:=0 TO g.height-1
IF y AND $F = 0
IF SetProgress(0,y*100/g.height)<>1
g.error:=LOAD_ABORTED
RETURN g.error
ENDIF
ENDIF
p:=GetLine(g,y)
-> fill image line buffer
FOR x:=0 TO g.width-1
linebuf[x]:=Long(p) -> once again I don't understand why that works
p:=p+3
ENDFOR
Write(g.filehandle,linebuf,g.width*4)
ReleaseLine(g,y)
ENDFOR
-> free memory buffer
FastDispose(linebuf,g.width*4)
-> everything went ok
g.error:=LOAD_OK
ENDPROC g.error
CHAR '$VER: CEL.gio 1.0 (9.1.99)',0